home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / sun / font / StrikeCache.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  3.0 KB  |  118 lines

  1. package sun.font;
  2.  
  3. import java.lang.ref.Reference;
  4. import java.lang.ref.ReferenceQueue;
  5. import java.lang.ref.SoftReference;
  6. import java.lang.ref.WeakReference;
  7. import java.security.AccessController;
  8. import sun.java2d.Disposer;
  9. import sun.misc.Unsafe;
  10.  
  11. public final class StrikeCache {
  12.    static final Unsafe unsafe = Unsafe.getUnsafe();
  13.    static ReferenceQueue refQueue = Disposer.getQueue();
  14.    static int MINSTRIKES = 8;
  15.    static int recentStrikeIndex = 0;
  16.    static FontStrike[] recentStrikes;
  17.    static boolean cacheRefTypeWeak;
  18.    static int nativeAddressSize;
  19.    static int glyphInfoSize;
  20.    static int xAdvanceOffset;
  21.    static int yAdvanceOffset;
  22.    static int boundsOffset;
  23.    static int widthOffset;
  24.    static int heightOffset;
  25.    static int rowBytesOffset;
  26.    static int topLeftXOffset;
  27.    static int topLeftYOffset;
  28.    static int pixelDataOffset;
  29.    static long invisibleGlyphPtr;
  30.  
  31.    static native void getGlyphCacheDescription(long[] var0);
  32.  
  33.    static void refStrike(FontStrike var0) {
  34.       int var1 = recentStrikeIndex;
  35.       recentStrikes[var1] = var0;
  36.       ++var1;
  37.       if (var1 == MINSTRIKES) {
  38.          var1 = 0;
  39.       }
  40.  
  41.       recentStrikeIndex = var1;
  42.    }
  43.  
  44.    static void disposeStrike(FontStrikeDisposer var0) {
  45.       if (var0.intGlyphImages != null) {
  46.          freeIntMemory(var0.intGlyphImages, var0.pScalerContext);
  47.       } else if (var0.longGlyphImages != null) {
  48.          freeLongMemory(var0.longGlyphImages, var0.pScalerContext);
  49.       } else if (var0.segIntGlyphImages != null) {
  50.          for(int var1 = 0; var1 < var0.segIntGlyphImages.length; ++var1) {
  51.             if (var0.segIntGlyphImages[var1] != null) {
  52.                freeIntMemory(var0.segIntGlyphImages[var1], var0.pScalerContext);
  53.                var0.pScalerContext = 0L;
  54.                var0.segIntGlyphImages[var1] = null;
  55.             }
  56.          }
  57.  
  58.          if (var0.pScalerContext != 0L) {
  59.             freeIntMemory(new int[0], var0.pScalerContext);
  60.          }
  61.       } else if (var0.segLongGlyphImages != null) {
  62.          for(int var2 = 0; var2 < var0.segLongGlyphImages.length; ++var2) {
  63.             if (var0.segLongGlyphImages[var2] != null) {
  64.                freeLongMemory(var0.segLongGlyphImages[var2], var0.pScalerContext);
  65.                var0.pScalerContext = 0L;
  66.                var0.segLongGlyphImages[var2] = null;
  67.             }
  68.          }
  69.  
  70.          if (var0.pScalerContext != 0L) {
  71.             freeLongMemory(new long[0], var0.pScalerContext);
  72.          }
  73.       }
  74.  
  75.    }
  76.  
  77.    static native void freeIntPointer(int var0);
  78.  
  79.    static native void freeLongPointer(long var0);
  80.  
  81.    private static native void freeIntMemory(int[] var0, long var1);
  82.  
  83.    private static native void freeLongMemory(long[] var0, long var1);
  84.  
  85.    public static Reference getStrikeRef(FontStrike var0) {
  86.       return getStrikeRef(var0, cacheRefTypeWeak);
  87.    }
  88.  
  89.    public static Reference getStrikeRef(FontStrike var0, boolean var1) {
  90.       if (var0.disposer == null) {
  91.          return (Reference)(var1 ? new WeakReference(var0) : new SoftReference(var0));
  92.       } else {
  93.          return (Reference)(var1 ? new WeakDisposerRef(var0) : new SoftDisposerRef(var0));
  94.       }
  95.    }
  96.  
  97.    static {
  98.       long[] var0 = new long[11];
  99.       getGlyphCacheDescription(var0);
  100.       nativeAddressSize = (int)var0[0];
  101.       glyphInfoSize = (int)var0[1];
  102.       xAdvanceOffset = (int)var0[2];
  103.       yAdvanceOffset = (int)var0[3];
  104.       widthOffset = (int)var0[4];
  105.       heightOffset = (int)var0[5];
  106.       rowBytesOffset = (int)var0[6];
  107.       topLeftXOffset = (int)var0[7];
  108.       topLeftYOffset = (int)var0[8];
  109.       pixelDataOffset = (int)var0[9];
  110.       invisibleGlyphPtr = var0[10];
  111.       if (nativeAddressSize < 4) {
  112.          throw new InternalError("Unexpected address size for font data: " + nativeAddressSize);
  113.       } else {
  114.          AccessController.doPrivileged(new 1());
  115.       }
  116.    }
  117. }
  118.